<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        //////////////////////////////////////Math对象 
        // 不是一个构造函数，所以不需要new来调用
        //最大值方法
        console.log(Math.PI); //一个属性
        console.log(Math.max(1, 3, 4, 35, 4, 6, 63, 5, 3));
        console.log(Math.max(1, 34, 'd'));
        console.log(Math.max());

        //绝对值方法
        console.log(Math.abs(-1));
        console.log(Math.abs('-1')); //隐式转换 会把字符串型-1 转换为数字型
        console.log(Math.abs('pink')); //NaN

        //三个取整方法
        console.log(Math.floor(1.5)); //向下取整
        console.log(Math.ceil(1.5)); //向上取整
        console.log(Math.round(1.5)); //四舍五入
        console.log(Math.round(-1.5)); //-1 其他数字都是四舍五入，但是.5特殊 往大了取

        //随机数方法 返回一个【0，1）之间的小数
        console.log(Math.random());
        console.log(getRandom(1, 10));
        //返回两个数之间的随机整数，并且包含这两个数
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }

        //随机点名
        var arr = ['许钱洲', '吴汶杰', '舒俊', '沈亚杰'];
        var i = getRandom(0, 3);
        console.log(arr[i]);




        //////////////////////////////////////日期对象 
        // Data()是一个构造函数 必须使用new 来调用创建我们的日期对象
        // 无参数返回系统当前时间
        var date = new Date();
        console.log(date);
        //参数型
        // 数字型 2019，10，01
        var date2 = new Date(2019, 10, 1); //返回的比实际月份大1
        console.log(date2);
        // 字符串型'2019-10-1 8:8:9'
        var date2 = new Date('2019-10-1 8:8:9');
        console.log(date2);

        //格式化日期 年月日
        var date = new Date();
        console.log(date.getFullYear()); //返回当前日期的年 2019
        console.log(date.getMonth() + 1); //当前的月份 0-11
        console.log(date.getDate()); //返回日
        console.log(date.getDay()); //周几，周日返回0

        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var dates = date.getDate();
        var days = date.getDay();
        var arr = ['日', '一', '二', '三', '四', '五', '六'];
        console.log('今天是：' + year + '年' + month + '月' + dates + '日' + '星期' + arr[days]);
        //时分秒
        console.log(date.getHours());
        console.log(date.getMinutes());
        console.log(date.getSeconds());
        //一个返回时分秒的函数
        function getTimer() {
            var timer = new Date();
            var h = timer.getHours();
            h = h < 10 ? '0' + h : h;
            var m = timer.getMinutes();
            m = m < 10 ? '0' + m : m;
            var s = timer.getSeconds();
            s = s < 10 ? '0' + s : s;
            return h + ':' + m + ':' + s
        }
        console.log(getTimer());

        //获得Date的总毫秒数(时间戳) 不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒
        // 1.通过valueof() getTime()
        var date = new Date();
        console.log(date.valueOf()); //现在时间距离1970.1.1的总毫秒数
        console.log(date.getTime());
        //2.简单写法(常用)
        var date1 = +new Date();
        console.log(date1);
        //3.H5新增的获得总毫秒数
        console.log(Date.now());




        ///////////////////////////////////数组对象
        // 1.利用字面量创建
        var arr = [1, 3, 3, 3];
        //2.利用new Array()
        var arr1 = new Array(2); //长度为2的空数组
        var arr1 = new Array(2, 3); //等价于[2,3]表示里面有两个数组元素 是 2和3

        //检测是否为数组
        // （1）instanceof 运算符 它可以用来检测是否为数组
        var arr = [];
        var obj = {};
        console.log(arr instanceof Array);
        console.log(obj instanceof Array);
        //(2)Array.isArray();H5新增的方法
        console.log(Array.isArray(arr));
        console.log(Array.isArray(obj));


        //添加或删除数组元素
        // 1.push()在数组的末尾 添加一个或多个数组元素
        var arr = [1, 2, 3];
        arr.push(4, 5, 6, 'pink');
        console.log(arr);
        // 2.unshift()在数组开头 添加
        arr.unshift('red');
        console.log(arr);
        // push()和unshift()返回值是新数组的长度
        // 原数组也会发生变化
        // 3.pop()删除数组最后一个元素
        arr.pop();
        console.log(arr);
        // 4.shift()删除第一个元素
        var c = arr.shift();
        console.log(arr);
        console.log(c);

        // 返回值是删除的那个数组
        // 原数组也会发生变化
        //5.splice(第几个开始，要删除个数,从删除位置要添加的数据（如果不写则只是删除）)  会影响原数组
        var arr7 = [1, 3, 5, 56, 6, 7, 7];
        var h = arr7.splice(0, 3, 1, 2, 3, 4)
        console.log(arr7);
        console.log(h);


        //数组排序
        // 1.翻转数组 reverse()
        var arr = [7, 13, 4, 4, 5];
        arr.reverse();
        console.log(arr);
        // 2. 冒泡排序
        arr.sort(); //如果有两位数 排序会先看高位
        console.log(arr);
        //sort里面放一个函数实现排序
        arr.sort(function (a, b) {
            return a - b;
        });
        console.log(arr);

        //数组索引方法a-b
        console.log(arr.indexOf(4)); //从前往后找 它只返回第一个满足条件的索引号 找不到则会返回-1
        console.log(arr.lastIndexOf(4)); //从后往前找

        //数组转化为字符串
        //1.toString()
        console.log(arr.toString());
        //join(分隔符)默认逗号
        var arr4 = ['fs', 'fsf', 'df', 'd'];
        console.log(arr4.join());
        console.log(arr4.join('-'));
        console.log(arr4.join('&'));

        //数组合并
        //concat() 合并两个数组 不影响原数组 返回一个新数组
        var arr5 = [1, 2, 3];
        var arr6 = [4, 5, 6];
        var arr6 = arr5.concat(arr6);
        console.log(arr6);

        ////////////////////////////////////////字符串对象
        //基本包装类型：(String Number Boolean)就是把简单数据类型 包装成 复杂数据类型
        var str = 'andy';
        console.log(str.length); //简单数据类型为什么会有length属性呢
        // （1）把简单数据类型包装 为 复杂数据类型
        var temp = new String('andy');
        //  (2)把临时变量的值给 str
        str = temp;
        //（3）销毁这个临时变量
        temp = null;

        //字符串的不可变：指的是里面的值不变，其实只是地址变了，内存中开辟了一个内存空间
        var str2 = 'andy';
        str2 = 'red'; //str从andy指向red，但是andy仍然存在
        //因为我们字符串的不可变所以不要大量拼接字符串
        var str2 = '';
        for (var i = 0; i < 100; i++) { //如果i过大会很卡
            str += i;
        }
        console.log(str);

        //根据字符串返回位置
        //字符串的所有方法，都不是修改字符串本身，都是返回一个新的字符串
        // indexOf('要查找的字符',[起始的位置])
        var str = '改革春风吹满地，春天来了';
        console.log(str.indexOf('春'));
        console.log(str.indexOf('春', 3)); //从索引号3的位置往后找
        //lastindexof()

        //根据位置返回字符
        // 1.charAt(index)根据位置返回字符
        var str = 'andy';
        console.log(str.charAt(3));
        // 遍历所有的字符
        for (var i = 0; i < str.length; i++) {
            console.log(str.charAt(i));
        }

        //2.charCodeAt(index)返回相应索引号的字符的ASCII值 目的： 判断用户按下了那个键
        console.log(str.charCodeAt(0));

        //str[index] 获取指定位置处的字符 H5新增的
        console.log(str[0]);

        //字符串操作方法
        // concat（atr1，str2，...）
        var str = 'andy';
        console.log(str.concat('red'));
        //substr(start,length)从start位置开始（索引号），length取得个数
        console.log(str.substr(0, 1));

        //替换字符replace（'被替换的字符'，‘替换为得字符’） 它只会替换第一个字符
        var str = 'andy';
        console.log(str.replace('a', 'b'));
        //有一个字符串var str = 'abcoefoxyozzopp'; 要求把o都换为*
        var str = 'abcoefoxyozzopp';
        while (str.indexOf('o') !== -1) {
            str = str.replace('o', '*');
        }
        console.log(str);

        //字符转换为数组 split（'分隔符'） 前面我们学过join 把数组转化为字符串
        var str = '1,3,3,4,4';
        console.log(str.split(','));
        var str = 'a&3&3&4&4';
        console.log(str.split('&'));

        //toUpperCase() 转换大写
        console.log(str.toUpperCase());

        //toLowerCase() 转为小写
        console.log(str.toLowerCase());
    </script>
    </script>

</head>

<body>

</body>

</html>